package com.ruoyi.system.service;

import com.ruoyi.system.api.domain.SysCompany;
import com.ruoyi.system.domain.vo.TreeSelect;

import java.util.List;

/**
 * 公司管理 服务层
 *
 * @author ruoyi
 */
public interface ISysCompanyService {
    /**
     * 查询公司管理数据
     *
     * @param company 公司信息
     * @return 公司信息集合
     */
    public List<SysCompany> selectCompanyList(SysCompany company);

    /**
     * 构建前端所需要树结构
     *
     * @param companys 公司列表
     * @return 树结构列表
     */
    public List<SysCompany> buildCompanyTree(List<SysCompany> companys);

    /**
     * 构建前端所需要下拉树结构
     *
     * @param companys 公司列表
     * @return 下拉树结构列表
     */
    public List<TreeSelect> buildCompanyTreeSelect(List<SysCompany> companys);

    /**
     * 根据角色ID查询公司树信息
     *
     * @param roleId 角色ID
     * @return 选中公司列表
     */
    public List<Long> selectCompanyListByRoleId(Long roleId);

    /**
     * 根据公司ID查询信息
     *
     * @param companyId 公司ID
     * @return 公司信息
     */
    public SysCompany selectCompanyById(Long companyId);

    /**
     * 根据ID查询所有子公司（正常状态）
     *
     * @param companyId 公司ID
     * @return 子公司数
     */
    public int selectNormalChildrenCompanyById(Long companyId);

    /**
     * 是否存在公司子节点
     *
     * @param companyId 公司ID
     * @return 结果
     */
    public boolean hasChildByCompanyId(Long companyId);

    /**
     * 查询公司是否存在用户
     *
     * @param companyId 公司ID
     * @return 结果 true 存在 false 不存在
     */
    public boolean checkCompanyExistUser(Long companyId);

    /**
     * 校验公司名称是否唯一
     *
     * @param company 公司信息
     * @return 结果
     */
    public String checkCompanyNameUnique(SysCompany company);

    /**
     * 校验公司是否有数据权限
     *
     * @param companyId 公司id
     */
    public void checkCompanyDataScope(Long companyId);

    /**
     * 新增保存公司信息
     *
     * @param company 公司信息
     * @return 结果
     */
    public int insertCompany(SysCompany company);

    /**
     * 修改保存公司信息
     *
     * @param company 公司信息
     * @return 结果
     */
    public int updateCompany(SysCompany company);

    /**
     * 删除公司管理信息
     *
     * @param companyId 公司ID
     * @return 结果
     */
    public int deleteCompanyById(Long companyId);
}
